// 1、引入 axios
import axios from 'axios'

// 2、除了可以直接使用axios，还可以使用方法 创建一个网络请求的对象
const instance = axios.create({
    //这里放的是网络请求的公共配置
    //timeout 最长5秒 浏览器没有响应，请求直接失效。
    timeout:5000,
})

const errorHandle = (status,info) =>{
    switch(status){
        case 400:
            console.log("语义有错误");
            break;
        case 401:
            console.log("服务器认证失败");
            break;
        case 403:
            console.log("服务器拒绝访问");
            break;
        case 404:
            console.log("地址错误");
            break;
        case 500:
            console.log("服务器遇到意外");
            break;
        case 502:
            console.log("服务器无响应");
            break;
        default:
            console.log(info);
            break;
    }
}

// 4、日后最常用的 拦截器 。  发送和获取响应的时候，都可能把这个请求拦截一下，做一些处理。
// 第一类 发送数据之前   请求拦截
instance.interceptors.request.use(
    //两个函数   config ： 请求的所有信息
    config =>{
        if(config === 'post'){
            //额外做处理 转为 JSON类型
            config.data = JSON.stringify(config.data)
        }
        return config;
    },
    error =>{
        //返回失败信息
        return Promise.reject(error)
    }

)

// 第二类 获取数据之前  响应拦截
instance.interceptors.response.use(
    response =>{
        return response.status === 200 ? Promise.resolve(response) : Promise.reject(response)
    },
    error =>{
        const { response } = error;
        //错误的处理才是最需要关注的
        //在上面专门写一个错误处理方案 调用
        errorHandle(response.status,response.info)
    }
)
// 3、把网络请求导出  
export default instance;